home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 49
/
Aminet 49 (2002)(GTI - Schatztruhe)[!][Jun 2002].iso
/
Aminet
/
util
/
misc
/
ReportPlus.lha
/
ReportPlus
/
source
/
f12.c
< prev
next >
Wrap
C/C++ Source or Header
|
2002-04-15
|
17KB
|
547 lines
#include <exec/types.h>
#include <exec/memory.h>
#include <intuition/intuition.h>
#include <intuition/gadgetclass.h>
#include <workbench/icon.h>
#include <workbench/workbench.h>
#include <dos/dosextens.h>
#include "rp.h" // before icon protos
#include <clib/alib_protos.h>
#include <clib/exec_protos.h>
#include <clib/intuition_protos.h>
#include <clib/icon_protos.h>
#include <clib/dos_protos.h>
#include <pragmas/icon_pragmas.h>
#include <reaction/reaction.h>
#include <gadgets/chooser.h>
#include <pragmas/chooser_pragmas.h>
#include <gadgets/string.h>
#include <pragmas/string_pragmas.h>
#include <gadgets/checkbox.h>
#include <pragmas/checkbox_pragmas.h>
#include <gadgets/layout.h>
#include <pragmas/layout_pragmas.h>
#include <gadgets/button.h>
#include <pragmas/button_pragmas.h>
#include <images/label.h>
#include <pragmas/label_pragmas.h>
#include <proto/label.h>
#include <classes/window.h>
#include <pragmas/window_pragmas.h>
#include <stdlib.h>
#include <string.h>
AGLOBAL ABOOL quit = FALSE;
AGLOBAL struct Gadget* icon_gadgets[GIDS_12 + 1];
AGLOBAL struct IconStruct icon =
{ TRUE, FALSE,
WBDRAWER, ""
};
// from rp.c
IMPORT Object* WinObject[FUNCTIONS + 1];
IMPORT TEXT IOBuffer[LONGESTFIELD + 1];
IMPORT SBYTE page;
IMPORT TEXT asldir[VLONGFIELD + 1];
IMPORT ULONG signal;
IMPORT struct Window* MainWindowPtr;
IMPORT struct Screen* ScreenPtr;
IMPORT struct SharedStruct shared;
IMPORT struct Library *ButtonBase,
*CheckBoxBase,
*ChooserBase,
*IconBase,
*LabelBase,
*LayoutBase,
*StringBase,
*WindowBase;
IMPORT struct Menu* MenuPtr;
IMPORT ABOOL done;
IMPORT TEXT aslresult[VLONGFIELD + 1];
#define ICONOPTIONS 8
MODULE ABOOL stop;
MODULE STRPTR IconOptions[ICONOPTIONS] =
{ "Disk",
"Drawer",
"Tool",
"Project",
"Trashcan",
"Device",
"Kickstart",
"AppIcon"
};
/* icon.type is the same as the values used by the system. So, the
value used by the gadget is one less than the actual value. */
AGLOBAL void icon1(void)
{ ULONG i;
struct List ChooserList;
struct ChooserNode *ChooserNodePtr[7 + 1];
struct Hook Hook12Struct;
icon.pathname[0] = 0;
NewList(&ChooserList);
for (i = 0; i <= 7; i++)
{ if (!(ChooserNodePtr[i] = (struct ChooserNode *) AllocChooserNode(CNA_Text, IconOptions[i], TAG_DONE)))
{ rq("Can't allocate chooser node!");
}
AddTail(&ChooserList, (struct Node *) ChooserNodePtr[i]);
} // automatically freed by ReAction at DisposeObject() time
/* Create the window object. */
lockscreen();
gadtools();
InitHook(&Hook12Struct, Hook12Func, NULL);
if (!(WinObject[12] = NewObject(WINDOW_GetClass(), NULL,
// window
WA_PubScreen, ScreenPtr,
WA_ScreenTitle, "Report+",
WA_Title, "Report+: Icon Processor",
WA_Activate, TRUE,
WA_DepthGadget, TRUE,
WA_DragBar, TRUE,
WA_CloseGadget, TRUE,
WA_SizeGadget, TRUE,
WA_IDCMP, IDCMP_RAWKEY,
WINDOW_IDCMPHook, &Hook12Struct,
WINDOW_IDCMPHookBits, IDCMP_RAWKEY,
WINDOW_MenuStrip, MenuPtr,
WINDOW_Position, WPOS_CENTERSCREEN,
WINDOW_ParentGroup, icon_gadgets[GID_12_LY1] =
NewObject(LAYOUT_GetClass(), NULL,
// root-layout
LAYOUT_Orientation, LAYOUT_ORIENT_VERT,
LAYOUT_SpaceOuter, TRUE,
LAYOUT_DeferLayout, TRUE,
LAYOUT_AddChild, NewObject(LAYOUT_GetClass(), NULL,
// layout
LAYOUT_Orientation, LAYOUT_ORIENT_HORIZ,
LAYOUT_SpaceOuter, TRUE,
LAYOUT_VertAlignment, LALIGN_CENTER,
LAYOUT_HorizAlignment,LALIGN_CENTER,
LAYOUT_BevelStyle, BVS_NONE,
LAYOUT_AddChild, icon_gadgets[GID_12_CB1] =
NewObject(CHECKBOX_GetClass(), NULL,
GA_ID, GID_12_CB1,
GA_RelVerify, TRUE,
GA_Text, "_Optimize colours?",
GA_Selected, (BOOL) icon.optimize,
TAG_END),
CHILD_WeightedHeight, 0,
LAYOUT_AddImage, NewObject
( LABEL_GetClass(), NULL,
LABEL_Text, "",
TAG_END
),
CHILD_WeightedWidth, 100,
LAYOUT_AddImage,
NewObject
( LABEL_GetClass(), NULL,
LABEL_Text, "_Type:",
LABEL_Justification, LJ_LEFT,
TAG_END),
CHILD_WeightedWidth, 0,
LAYOUT_AddChild, icon_gadgets[GID_12_CH1] =
NewObject
( CHOOSER_GetClass(), NULL,
GA_ID, GID_12_CH1,
GA_RelVerify, TRUE,
CHOOSER_PopUp, TRUE,
CHOOSER_Labels, &ChooserList,
CHOOSER_Selected, (WORD) (icon.type - 1),
TAG_END),
CHILD_WeightedWidth, 0,
TAG_END),
CHILD_WeightedHeight, 0,
LAYOUT_AddChild, icon_gadgets[GID_12_CB2] =
NewObject(CHECKBOX_GetClass(), NULL,
// checkbox
GA_ID, GID_12_CB2,
GA_RelVerify, TRUE,
GA_Text, "Preserve p_lanar data?",
GA_Selected, (BOOL) icon.planar,
TAG_END),
CHILD_WeightedHeight, 0,
LAYOUT_AddChild, NewObject(LAYOUT_GetClass(), NULL,
// layout
LAYOUT_Orientation, LAYOUT_ORIENT_HORIZ,
LAYOUT_SpaceOuter, TRUE,
LAYOUT_VertAlignment, LALIGN_CENTER,
LAYOUT_HorizAlignment,LALIGN_CENTER,
LAYOUT_BevelStyle, BVS_FIELD,
LAYOUT_AddImage, NewObject(LABEL_GetClass(), NULL,
// label
LABEL_Text, "_Pathname(s):",
LABEL_Justification,LJ_LEFT,
TAG_END),
LAYOUT_AddChild, icon_gadgets[GID_12_ST1] =
NewObject(STRING_GetClass(), NULL,
// string
GA_ID, GID_12_ST1,
GA_RelVerify, TRUE,
STRINGA_TextVal, icon.pathname,
STRINGA_MinVisible,20,
TAG_END),
LAYOUT_AddChild, icon_gadgets[GID_12_BU1] =
NewObject(NULL, "button.gadget",
// button
GA_ID, GID_12_BU1,
GA_RelVerify, TRUE,
BUTTON_AutoButton,BAG_POPFILE,
TAG_END),
CHILD_WeightedWidth, 0,
TAG_END),
CHILD_WeightedHeight, 0,
LAYOUT_AddChild, icon_gadgets[GID_12_ST2] =
NewObject(STRING_GetClass(), NULL,
// string
GA_ReadOnly, TRUE,
GA_ID, GID_12_ST2,
STRINGA_TextVal, "Ready.",
TAG_END),
CHILD_WeightedHeight, 0,
LAYOUT_AddChild, NewObject(LAYOUT_GetClass(), NULL,
// layout
LAYOUT_Orientation, LAYOUT_ORIENT_HORIZ,
LAYOUT_SpaceOuter, TRUE,
LAYOUT_VertAlignment, LALIGN_CENTER,
LAYOUT_HorizAlignment,LALIGN_CENTER,
LAYOUT_BevelStyle, BVS_NONE,
LAYOUT_AddChild, icon_gadgets[GID_12_BU3] =
NewObject(NULL, "button.gadget",
// button
GA_ID, GID_12_BU3,
GA_RelVerify, TRUE,
GA_Text, "Pro_cess",
TAG_END),
CHILD_WeightedWidth, 50,
LAYOUT_AddChild, icon_gadgets[GID_12_BU4] =
NewObject(NULL, "button.gadget",
// button
GA_ID, GID_12_BU4,
GA_RelVerify, TRUE,
GA_Text, "Stop",
GA_Disabled, TRUE,
TAG_END),
CHILD_WeightedWidth, 50,
TAG_END),
CHILD_WeightedHeight, 0,
TAG_END),
TAG_END)
))
{ rq("Can't create ReAction objects!");
}
unlockscreen();
openwindow();
ActivateLayoutGadget(icon_gadgets[GID_12_LY1], MainWindowPtr, NULL, (Object) icon_gadgets[GID_12_ST1]);
loop();
closewindow();
if (quit)
{ cleanexit(EXIT_SUCCESS);
} }
AGLOBAL void icon_do(void)
{ STRPTR stringptr;
if (!(GetAttr
( CHOOSER_Selected, icon_gadgets[GID_12_CH1], (ULONG *) &(icon.type)
)))
{ rq("Unsupported inquiry!"); // should never happen
}
icon.type++;
if (!(GetAttr
( STRINGA_TextVal, icon_gadgets[GID_12_ST1], (ULONG *) &stringptr
)))
{ rq("Unsupported inquiry!"); // should never happen
}
strcpy(icon.pathname, stringptr);
if (!(GetAttr
( GA_Selected, icon_gadgets[GID_12_CB1], (ULONG *) &(icon.optimize)
)))
{ rq("Unsupported inquiry!"); // should never happen
}
if (!(GetAttr
( GA_Selected, icon_gadgets[GID_12_CB2], (ULONG *) &(icon.planar)
)))
{ rq("Unsupported inquiry!"); // should never happen
}
SetGadgetAttrs
( icon_gadgets[GID_12_CH1], MainWindowPtr, NULL,
GA_Disabled, TRUE,
TAG_END
);
SetGadgetAttrs
( icon_gadgets[GID_12_CB1], MainWindowPtr, NULL,
GA_Disabled, TRUE,
TAG_END
);
SetGadgetAttrs
( icon_gadgets[GID_12_CB2], MainWindowPtr, NULL,
GA_Disabled, TRUE,
TAG_END
);
SetGadgetAttrs
( icon_gadgets[GID_12_ST1], MainWindowPtr, NULL,
GA_Disabled, TRUE,
TAG_END
);
SetGadgetAttrs
( icon_gadgets[GID_12_BU1], MainWindowPtr, NULL,
GA_Disabled, TRUE,
TAG_END
);
SetGadgetAttrs
( icon_gadgets[GID_12_BU3], MainWindowPtr, NULL,
GA_Disabled, TRUE,
TAG_END
);
SetGadgetAttrs
( icon_gadgets[GID_12_BU4], MainWindowPtr, NULL,
GA_Disabled, FALSE,
TAG_END
);
SetAttrs
( WinObject[12],
WA_BusyPointer, TRUE,
TAG_END
);
strcpy(shared.pathname, icon.pathname);
convert(TRUE);
strcpy(icon.pathname, shared.pathname);
if (!stop)
{ SetGadgetAttrs
( icon_gadgets[GID_12_ST2], MainWindowPtr, NULL,
STRINGA_TextVal, "All done.",
TAG_END
);
}
SetAttrs
( WinObject[12],
WA_BusyPointer, FALSE,
TAG_END
);
SetGadgetAttrs
( icon_gadgets[GID_12_CH1], MainWindowPtr, NULL,
GA_Disabled, FALSE,
TAG_END
);
SetGadgetAttrs
( icon_gadgets[GID_12_CB1], MainWindowPtr, NULL,
GA_Disabled, FALSE,
TAG_END
);
SetGadgetAttrs
( icon_gadgets[GID_12_CB2], MainWindowPtr, NULL,
GA_Disabled, FALSE,
TAG_END
);
SetGadgetAttrs
( icon_gadgets[GID_12_ST1], MainWindowPtr, NULL,
GA_Disabled, FALSE,
TAG_END
);
SetGadgetAttrs
( icon_gadgets[GID_12_BU1], MainWindowPtr, NULL,
GA_Disabled, FALSE,
TAG_END
);
SetGadgetAttrs
( icon_gadgets[GID_12_BU3], MainWindowPtr, NULL,
GA_Disabled, FALSE,
TAG_END
);
SetGadgetAttrs
( icon_gadgets[GID_12_BU4], MainWindowPtr, NULL,
GA_Disabled, TRUE,
TAG_END
);
}
AGLOBAL void iconconvert(ABOOL gui)
{ TEXT saystring[LONGFIELD + 1];
ULONG length = strlen(shared.thisfile);
struct DiskObject* IconPtr;
if (length <= 5) // in case we get passed an empty string
{ return;
}
if (!stricmp(&(shared.thisfile[length - 5]), ".info"))
{ shared.thisfile[length - 5] = 0;
}
strcpy(saystring, "Processing ");
strcat(saystring, shared.thisfile);
strcat(saystring, ".info...");
if (gui)
{ SetGadgetAttrs
( icon_gadgets[GID_12_ST2], MainWindowPtr, NULL,
STRINGA_TextVal, saystring,
TAG_END
);
} else
{ Printf("%s", saystring);
Flush(Output());
saystring[0] = 0;
}
if (IconPtr = GetIconTags(shared.thisfile, TAG_DONE))
{ IconPtr->do_Type = (UWORD) icon.type;
if (PutIconTags(shared.thisfile, IconPtr,
ICONPUTA_NotifyWorkbench, TRUE,
ICONPUTA_DropPlanarIconImage, (BOOL) !icon.planar,
ICONPUTA_OptimizeImageSpace, (BOOL) icon.optimize,
TAG_DONE
))
{ strcat(saystring, "done.");
} else strcat(saystring, "failed to write!");
FreeDiskObject(IconPtr);
} else strcat(saystring, "failed to read!");
if (gui)
{ SetGadgetAttrs
( icon_gadgets[GID_12_ST2], MainWindowPtr, NULL,
STRINGA_TextVal, saystring,
TAG_END
);
} else
{ Printf("%s\n", saystring);
}
checkabort(gui);
}
AGLOBAL void icon_loop(ULONG gid)
{ STRPTR stringptr;
switch (gid)
{
case GID_12_CH1:
if (!(GetAttr
( CHOOSER_Selected, icon_gadgets[GID_12_CH1], (ULONG *) &(icon.type)
)))
{ rq("Unsupported inquiry!"); // should never happen
}
icon.type++;
break;
case GID_12_ST1:
if (!(GetAttr
( STRINGA_TextVal, icon_gadgets[GID_12_ST1], (ULONG *) &stringptr
)))
{ rq("Unsupported inquiry!"); // should never happen
}
strcpy(icon.pathname, stringptr);
break;
case GID_12_BU1:
strcpy(shared.pathname, icon.pathname);
multiasl("#?.info");
strcpy(icon.pathname, shared.pathname);
SetGadgetAttrs
( icon_gadgets[GID_12_ST1], MainWindowPtr, NULL,
STRINGA_TextVal, icon.pathname,
TAG_END
);
break;
case GID_12_BU3:
icon_do();
break;
case GID_12_CB1:
if (!(GetAttr
( GA_Selected, icon_gadgets[GID_12_CB1], (ULONG *) &(icon.optimize)
)))
{ rq("Unsupported inquiry!"); // should never happen
}
break;
case GID_12_CB2:
if (!(GetAttr
( GA_Selected, icon_gadgets[GID_12_CB2], (ULONG *) &(icon.planar)
)))
{ rq("Unsupported inquiry!"); // should never happen
}
break;
default:
break;
} }
AGLOBAL ULONG Hook12Func(struct Hook *h, VOID *o, VOID *msg)
{ /* "When the hook is called, the data argument points to the
window object and message argument to the IntuiMessage." */
UWORD code, qual;
geta4(); // wait till here before doing anything
code = ((struct IntuiMessage *) msg)->Code;
qual = ((struct IntuiMessage *) msg)->Qualifier;
switch(code)
{
case SCAN_HELP:
helpabout();
break;
case SCAN_ESCAPE:
if ((qual & IEQUALIFIER_LSHIFT) || (qual & IEQUALIFIER_RSHIFT))
{ cleanexit(EXIT_SUCCESS);
} else page = 0;
break;
case SCAN_P:
ActivateLayoutGadget(icon_gadgets[GID_12_LY1], MainWindowPtr, NULL, (Object) icon_gadgets[GID_12_ST1]);
break;
case SCAN_T:
if ((qual & IEQUALIFIER_LSHIFT) || (qual & IEQUALIFIER_RSHIFT))
{ if (icon.type == 1)
{ icon.type = ICONOPTIONS;
} else icon.type--;
} else
{ if (icon.type == ICONOPTIONS)
{ icon.type = 1;
} else icon.type++;
}
SetGadgetAttrs
( icon_gadgets[GID_12_CH1], MainWindowPtr, NULL,
CHOOSER_Selected, icon.type - 1,
TAG_END
);
break;
case SCAN_PERIOD:
strcpy(shared.pathname, icon.pathname);
multiasl("#?.info");
strcpy(icon.pathname, shared.pathname);
SetGadgetAttrs
( icon_gadgets[GID_12_ST1], MainWindowPtr, NULL,
STRINGA_TextVal, icon.pathname,
TAG_END
);
break;
default:
break;
}
return(1);
}
AGLOBAL void icon_die(void)
{ IOBuffer[16] = (UBYTE) icon.type;
IOBuffer[17] = (UBYTE) icon.optimize;
IOBuffer[18] = (UBYTE) icon.planar;
}
AGLOBAL void icon_config(void)
{ icon.type = (ULONG) IOBuffer[16];
icon.optimize = (ULONG) IOBuffer[17];
icon.planar = (ULONG) IOBuffer[18];
}